#include "bsp_key.h"

void KEY_GPIO_Config(void){
	
	GPIO_InitTypeDef GPIO_InitStruct;
	
	RCC_APB2PeriphClockCmd(KEY1_GPIO_CLK,ENABLE);
	
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;
	GPIO_InitStruct.GPIO_Pin = KEY1_GPIO_PIN;
	GPIO_Init(KEY1_GPIO_PORT,&GPIO_InitStruct);
	
}

uint8_t KEY_SCAN(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin){
	if( GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)==KEY_ON) 
	{
		while( GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON);
		return KEY_ON;
	}else return KEY_OFF;
}

// 适用于中断中的按键检测函数，不包含阻塞等待
uint8_t KEY_Scan_NonBlocking(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin){
  static uint8_t key_state = 0;     // 按键状态
  static uint8_t key_time = 0;      // 按键消抖计时
  
  if( GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)==KEY_ON) 
  {
    if(key_state == 0)  // 按键按下
    {
      key_time++;       // 消抖计时
      if(key_time >= 3) // 消抖时间为30ms(3*10ms)
      {
        key_state = 1;
        key_time = 0;
        return KEY_ON;  // 按键按下
      }
    }
    else
    {
      key_time = 0;     // 清除计时
    }
  }
  else
  {
    key_state = 0;      // 按键释放
    key_time = 0;       // 清除计时
  }
  
  return KEY_OFF;
}
